//
//  ProblemMS0103.swift
//  TestProject
//
//  Created by 武侠 on 2021/3/22.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 面试题 01.03. URL化 【字符替换】
 URL化。编写一种方法，将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符，并且知道字符串的“真实”长度。（注：用Java实现的话，请使用字符数组实现，以便直接在数组上操作。）

 示例 1：
     输入："Mr John Smith    ", 13
     输出："Mr%20John%20Smith"
 示例 2：
     输入："               ", 5
     输出："%20%20%20%20%20"
  
 提示：
    字符串长度在 [0, 500000] 范围内。
 */
@objcMembers class ProblemMS0103: NSObject {
    func solution() {
        print(replaceSpacesStr("Mr John Smith    ", 13))
        print(replaceSpacesStr("               ", 5))
    }
    /*
     使用charts:[Character]数组
     1: 遍历字符串，
     2: 遇到空替换%20，其他字符则插入
     执行用时：
        748 ms, 在所有 Swift 提交中击败了   53.57%  的用户
     内存消耗：
        47.3 MB, 在所有 Swift 提交中击败了   7.14%   的用户
     */
    func replaceSpaces(_ S: String, _ length: Int) -> String {
        var charts:[Character] = []
        for (i, c) in S.enumerated() {
            if i == length {
                break
            }
            
            if c == " " {
                charts.append("%")
                charts.append("2")
                charts.append("0")
            } else {
                charts.append(c)
            }
        }
        
        return String(charts)
    }
    
    /*
     使用Str.append的方式，效率更高
     执行用时：652 ms, 在所有 Swift 提交中击败了67.86%的
     用户内存消耗：19.5 MB, 在所有 Swift 提交中击败了64.29%的用户
     
     */
    func replaceSpacesStr(_ S: String, _ length: Int) -> String {
        var charts:String = ""
        for (i, c) in S.enumerated() {
            if i == length {
                break
            }
            
            if c == " " {
                charts.append("%20")
            } else {
                charts.append(c)
            }
        }
        
        return String(charts)
    }
}
